package cin.ufpe.br.projetoESS.Dados;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.Date;

import cin.ufpe.br.projetoESS.Entidades.Assinante;
import cin.ufpe.br.projetoESS.Entidades.Assinante;
import cin.ufpe.br.projetoESS.Entidades.Funcionario;
import cin.ufpe.br.projetoESS.Entidades.Relatorios.DadosFinanceiros;

public class RepositorioAssinante {

	private Connection conn;

	public RepositorioAssinante(Connection conn){
		this.conn = conn;
	}


	public Assinante buscarAssinante (int contratoAssinante) throws SQLException{

		Statement statement = conn.createStatement();		
		ResultSet resultSet;

		Assinante assinante = null;

		String queryBuscaFuncionario = "SELECT a.*, TO_CHAR(dataInicioContrato) AS dtInicioContrato, TO_CHAR(validadeContrato) AS validContrato FROM Assinante a WHERE contrato = " + contratoAssinante;

		resultSet = statement.executeQuery(queryBuscaFuncionario);


		if(resultSet.next()){

			String nome = resultSet.getString("nome");
			String endereco = resultSet.getString("endereco");
			int telefone = resultSet.getInt("telefone");
			String email = resultSet.getString("email");
			int cpf = resultSet.getInt("cpf");
			int contrato = resultSet.getInt("contrato");
			int tipo = resultSet.getInt("tipo");
			String dataInicioContrato = resultSet.getString("dtInicioContrato");
			String validadeContrato = resultSet.getString("validContrato");

			assinante = new Assinante(nome, endereco, telefone, email, cpf, contrato, dataInicioContrato, validadeContrato, tipo);
		}

		return assinante;

	}

	public void inserirAssinante (Assinante assin) throws SQLException{

		Statement statement = conn.createStatement();

	
		
		String queryInsertAssinante = "INSERT INTO ASSINANTE (nome,endereco,telefone,email,cpf,contrato,dataInicioContrato, validadeContrato, tipo) "
			+ "VALUES('" + assin.getNome() + "','" 
			+ assin.getEndereco() + "',"
			+ assin.getTelefone() + ",'"
			+ assin.getEmail() + "',"
			+ assin.getCpf() + ","
			+ assin.getContrato() + ","
			+ "TO_DATE('"+ assin.getDataInicioContrato() +"','dd/mm/yyyy')" + ","
			+ "TO_DATE('"+ assin.getValidadeContrato() +"','dd/mm/yyyy')" + ","
			+ assin.getTipo() +")";

		System.out.println(queryInsertAssinante);
		statement.executeUpdate(queryInsertAssinante);
		conn.commit();

	}
	
	public Assinante[] getDadosAssinantesAtivos() throws SQLException{

		Statement statement = conn.createStatement();		
		ResultSet resultSet;

		int qtdAssinantesAtivos = 0;		
		Assinante[] assinantesAtivos = null;

		String queryQtdAssinantesAtivos = "SELECT COUNT(*) AS qtdAtivos FROM Assinante WHERE validadeContrato >= SYSDATE";
		resultSet = statement.executeQuery(queryQtdAssinantesAtivos);

		resultSet.next();

		qtdAssinantesAtivos = resultSet.getInt("qtdAtivos");

		if(qtdAssinantesAtivos > 0){

			assinantesAtivos = new Assinante[qtdAssinantesAtivos];

			String queryAssinantesAtivos = "SELECT a.*, TO_CHAR(a.dataInicioContrato) AS dtInicioContrato, TO_CHAR(a.validadeContrato) AS validContrato FROM Assinante a " +
											"WHERE validadeContrato >= SYSDATE";
			
			resultSet = statement.executeQuery(queryAssinantesAtivos);

			for(int i = 0; i < qtdAssinantesAtivos; i++){	
				if(resultSet.next()){

					String nome = resultSet.getString("nome");
					int telefone = resultSet.getInt("telefone");
					int cpf = resultSet.getInt("cpf");
					String email = resultSet.getString("email");
					String endereco = resultSet.getString("endereco");
					int tipo = resultSet.getInt("tipo");
					String validadeContrato = resultSet.getString("validContrato");
					int contrato = resultSet.getInt("contrato");
					String dataInicioContrato = resultSet.getString("dataInicioContrato");

					assinantesAtivos[i] = new Assinante(nome, endereco, telefone, email, cpf, contrato, dataInicioContrato, validadeContrato, tipo);
				}
			}			
		}

		return assinantesAtivos;
	}

	public DadosFinanceiros[] getDadosGanhosAssinantes() throws SQLException{

		DadosFinanceiros[] dadosFinanceiros = null;
		Assinante[] assinantesAtivos = this.getDadosAssinantesAtivos();

		if(assinantesAtivos != null){
			dadosFinanceiros = new DadosFinanceiros[assinantesAtivos.length];

			for(int i = 0; i < dadosFinanceiros.length; i++){
				
				double pagamentoMensal = 0;
				
				switch(assinantesAtivos[i].getTipo()){
				case Assinante.DIARIO:
						pagamentoMensal = Assinante.DIARIO_VALOR_MENSAL;
					break;
					
				case Assinante.DIAS_UTEIS:
						pagamentoMensal = Assinante.DIAS_UTEIS_VALOR_MENSAL;
					break;
					
				case Assinante.FIM_DE_SEMANA:
						pagamentoMensal = Assinante.FIM_DE_SEMANA_VALOR_MENSAL;
					break;
				}
				
				dadosFinanceiros[i] = new DadosFinanceiros(assinantesAtivos[i].getNome(), pagamentoMensal);
			}			
		}

		return dadosFinanceiros;

	} 

}
